package com.apobates.forum.toro.tuple.strategy;

import org.apache.commons.lang3.tuple.Pair;
import java.util.Collection;
import java.util.Map;
import java.util.function.Function;
import java.util.function.Supplier;

/**
 * 左对象从指定的供应函数中获取的策略
 * 适用于： 左One to 右Many
 * @param <L> 左对象的类型
 * @param <R> 右对象的类型
 * @param <U> 右函数的参数类型
 *
 * @author xiaofanku@live.cn
 * @since 20220517
 */
@FunctionalInterface
public interface AnyPairSupplyStrategy<L,R,U> {
    /**
     * 执行入口
     * @param leftObjFun 左对象的供应函数
     * @param rightFun 右对象的查询函数
     * @param arguments 左对象与右对象的连接参数。key的取值参看:PairMapper.Argument的属性名称
     * @return
     */
    Pair<L, Collection<R>> apply(Supplier<L> leftObjFun, Function<U, Collection<R>> rightFun, Map<String, String> arguments);
}
